import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;
/**
 * Clase Enemigo: contiene los metodos para que los enemigos 
 * se muevan por toda la pantalla verificando si llega achocar con algun otro obstaculo 
 * y cambiar de direccion de movimiento.
 * 
 * @author Vianey Ortiz 
 * @version 05/12/2012
 */
public class Enemigo extends Actor
{
    private int velocidad=15;
    
    /**
     * Metodo para verificar si choco con algun coral
     * @return true en caso de que no hay colision con un coral
     *         false en caso de que encuentra un coral 
     */
    public boolean checacoralMueve()
    {
        Actor qoral;
        qoral= super.getOneIntersectingObject(Coral.class);
        if(qoral == null)
            return true;
        else
            return false;
    }
    
     /**
     * Checa si los peces ya estan en el limite Izquierdo de la pantalla       
     * si estan en el limite los cambia del otro extremo, 
     * no regresa ningun valor.
     */
    public void checaLimiteIzq()
    {
        if(getX()==0)
        {
            setLocation(700,getY());
        }
    }
    
    /**
     * Checa si los peces ya estan en el limite Derecho de la pantalla       
     * si estan en el limite los cambia del otro extremo, 
     * no regresa ningun valor.
     */
    public void checaLimiteDer()
    {
        if(getX()>=770)
        {
            setLocation(0,getY());
        }
    }
    
    /**
    * Checa a donde se mueve el Pez, 
    * para seguirlo
    */
    public void checaMovPez()
    {
        List pez = getObjectsInRange(1200,Pez.class);
        int x;
        int y;
        Pez pes =(Pez)pez.get(0);
        x=pes.getX();
        y=pes.getY();
        turnTowards(x,y);
        move(2);
    }
    
    /**
     * Decrementa en 5 unidades la velocidad
     * @return velocidad
     */
    public int decrementaVelocidad()
    {
        velocidad-=5;
        return velocidad;
    }
    
    public int velocidad()
    {
        return velocidad;
    }
    
    /**
     * Checa si hay coolision con alguna BalaPlancton 
     * @return true en caso de que hay colision 
     *         false en caso de que no encuentra un Plancton.      * 
     */
    public boolean checaPlancton()
    {
        Actor plancton;
        plancton= super.getOneObjectAtOffset(0,0,BalaPlancton.class);
        if(plancton != null)
        {
            WorldFish mund;
            mund=(WorldFish)super.getWorld();
            mund.removeObject(plancton);
            return true;
        }
        else
            return false;
    }
    
    /**
     * Elimina un enemigo en especifico cuando 
     * es necesario
     */
    public void eliminaEnemigo()
    {
        WorldFish mundo;
        mundo=(WorldFish)super.getWorld();
        mundo.removeObject(this);
    }
    
    /**
     * Verifica si choco con una BalaPlancton
     * y decrementa la velocidad
     */
    public void velocidadActual()
    {
        if(checaPlancton())
        {
            decrementaVelocidad();
        }
    }
    
    /**
     * Checa si hay BalaPlancton
     * en el mundo, 
     * @return planc con el numero de Balas en el mundo 
     */
    public int hayPlancton()
    {
        int planc;
        WorldFish mundo;
        mundo=(WorldFish)super.getWorld();
        planc=((mundo.getObjects(BalaPlancton.class)).toArray()).length;
        return planc;
    }
}
